﻿#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

struct info
{
	char name[21];
	float age;
};
void func05(struct info s)
{
	strcpy(s.name, "李四");
	s.age = 20;
	printf("2.func05中输出用户姓名和年龄：%s	%.1f\n", s.name, s.age);//李四      20.0
}
void func06(struct info* s)
{
	strcpy(s->name, "王五");
	s->age = 22;
}
struct info func07()
{
	struct info s;
	strcpy(s.name, "马六");
	s.age = 24;
	return s;
}
int func08()
{
	int a = 10;
	return a;
}
struct info* func09()
{
	struct info s;
	strcpy(s.name, "杨七");
	s.age = 26;
	return &s;
}

//main127：结构体函数作为形参和返回值
int main127()
{
	struct info s = { "张三",18 };
	//3.值传递不改变主函数变量的值；
	func05(s);
	//4.地址传递可改变主函数变量的值；
	func06(&s);
	printf("1.输出用户姓名和年龄：%s	%.1f\n", s.name, s.age);//张三      18.0-->王五      22.0

	struct info sRet = func07();
	printf("5.结构体作为返回结果，输出用户姓名和年龄：%s	%.1f\n", sRet.name, sRet.age);//马六  24.0
	int a = func08();
	printf("6.接收函数的返回结果a，并输出：%d\n", a);//10

	//8.返回的结构体指针地址，随着func09的结束而释放栈区内存，销毁&s指向的内存空间的值。所以结果是不准确的。
	struct info* sRetP = func09();
	printf("7.结构体指针变量sRetP接收返回结果，输出用户姓名和年龄：%s	%.1f\n", sRetP->name, sRetP->age);//胞烫烫烫烫烫烫烫烫?79v       26.0


	system("pause");
	return EXIT_SUCCESS;
}